/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ejb.negocio;

import objetos.ParDeFechas;
import ejb.dao.*;
import entidades.*;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.faces.model.SelectItem;

/**
 *
 * @author Pablo
 */
@Stateless
public class PropuestaService implements PropuestaServiceLocal {
   // @EJB
    //private PropuestaDestinosDAO propuestaDestinosDAO;
    

    @EJB
    PaisDAOLocal paisDAO;
    @EJB
    PlanEcoDAOLocal planEcoDAO;
    @EJB
    PlanOcioDAOLocal planOcioDAO;
    @EJB
    PropuestaDAOLocal propuestaDAO;
    @EJB
    SolicitudDAOLocal solicitudDAO;
    @EJB
    UsuarioDAOLocal usuarioDAO;
    @EJB
    PlanEcoTradDAOLocal planEcoTradDAO;
    @EJB
    PlanOcioTradDAOLocal planOcioTradDAO;
    @EJB
    PaisTradDAOLocal paisTradDAO;
    @EJB
    PropuestaDestinosDAOLocal propuestaDestinosDAO;
    @EJB
    PropuestaFechasDAOLocal propuestaFechasDAO;
    @EJB
    PropuestaEditoresDAOLocal propuestaEditoresDAO;
    
    @Override
    public ArrayList<Propuesta> buscaPropuesta(Integer paisDestino, Date fechaIni, 
            Date fechaFin, Integer nDiasMax, Integer nDiasMin, Integer planEco, 
            Integer planOcio) {
        Paises entityPais = null;
        if (paisDestino != null){
            entityPais = paisDAO.getPais(paisDestino);
        }
        Planeseco entityPlanEco = null;
        if (planEco != null){
            entityPlanEco = planEcoDAO.getPlanEco(planEco);
        }
        Planesocio entityPlanOcio = null;
        if (planOcio != null){
            entityPlanOcio = planOcioDAO.getPlanOcio(planOcio);
        }
        ArrayList<Propuesta> propuestas = propuestaDAO.findPropuesta(entityPais, 
                fechaIni, fechaFin, nDiasMax, nDiasMin, entityPlanEco, entityPlanOcio);
        return propuestas;
    }

    @Override
    public ArrayList<Paises> getListaPaises() {
        return paisDAO.getListaPaises();
    }

    @Override
    public ArrayList<Planeseco> getListaPlanesEco() {
        return planEcoDAO.getPlanesEco();
    }

    @Override
    public ArrayList<Planesocio> getListaPlanesOcio() {
        return planOcioDAO.getPlanesOcio();
    }
    
    
    @Override
    public Propuesta getPropuesta(Integer idPropuesta) {
        return propuestaDAO.getPropuesta(idPropuesta);
        /*
        Propuesta propuesta = propuestaDAO.getPropuesta(idPropuesta);
        getSolicitudByNick("pablo", propuesta.getIdPropuesta());
        return propuesta;
        * 
        */
    }

    @Override
    public Solicitudes getSolicitudByNick(Usuario nick, Propuesta idPropuesta) {
        return solicitudDAO.getSolicitudByNickYIdProp(nick, idPropuesta);
    }

    @Override
    public void newSolicitud(Usuario nick, Propuesta idPropuesta, String mensaje) {
        Solicitudes solicitud = new Solicitudes();
        solicitud.setNick(nick);
        solicitud.setIdPropuesta(idPropuesta);
        solicitud.setMensajeSolicitud(mensaje);
        solicitud.setFechaSolicitud(Calendar.getInstance().getTime());
        solicitudDAO.newSolicitud(solicitud);
    }

    @Override
    public String getPlanEcoDescr(int planEco, String idioma) {
        return planEcoTradDAO.getDescrPlanEco(planEco,idioma);        
    }

    @Override
    public String getPlanEcoNombre(int planEco, String idioma) {
        return planEcoTradDAO.getNombrePlanEco(planEco,idioma);
    }

    @Override
    public Planesecotrad getPlanEcoTrad(Planeseco plan, String idioma) {
        return planEcoTradDAO.getPlanEcoTrad(plan, idioma);
    }

    @Override
    public Paisestrad getPaisTrad(Paises pais, String idioma) {
        return paisTradDAO.getPaisTrad(pais, idioma);
    }

    @Override
    public Paises getPais(Integer idPais) {
        return paisDAO.getPais(idPais);
    }    

    @Override
    //Insertar nueva propuesta en la base de datos
    public String insertProposal(Usuario nick, ArrayList<SelectItem> destinos, 
            ArrayList<ParDeFechas> fechas, Double costeMax, Double costeMin, 
            Short nDiasMax, Short nDiasMin, Integer planEco, 
            Integer planOcio, String comentario, Boolean publica) {
        Propuesta propuesta = new Propuesta();
        propuesta.setCosteMax(costeMax);
        propuesta.setCosteMin(costeMin);
        propuesta.setDiasMax(nDiasMax);
        propuesta.setDiasMin(nDiasMin);
        if (planEco != null)
            propuesta.setPlanEco(planEcoDAO.getPlanEco(planEco));
        if (planOcio != null)
            propuesta.setPlanOcio(planOcioDAO.getPlanOcio(planOcio));  
        if (comentario.equals(""))
            propuesta.setResumen("-");
        else
            propuesta.setResumen(comentario);
        propuesta.setPublica(publica);        
        propuesta.setFechaCreacion(Calendar.getInstance().getTime());
        propuesta.setFechaActualiza(Calendar.getInstance().getTime());        
        propuesta.setNick(nick);
        
        // A ver qué hacemos con estas dos ----------------------------------
        propuesta.setFechaCaduca(Calendar.getInstance().getTime());        
        //propuesta.setInvitacionesList(null);
        Propuesta propInsertada = null;
        String error = "";        
        try{
            propInsertada = propuestaDAO.newPropuesta(propuesta);
            for (int i=0; i<destinos.size(); i++){
                propuestaDestinosDAO.newPropuestaDestino(propInsertada, 
                        paisDAO.getPais((Integer)destinos.get(i).getValue()));
            }
            for (int i=0; i<fechas.size(); i++){
                propuestaFechasDAO.newPropuestaFechas(fechas.get(i).getFechaIni(), 
                        fechas.get(i).getFechaFin(), propInsertada);
            }
            propuestaEditoresDAO.newPropuestaEditor(nick, propInsertada, true, 
                    Calendar.getInstance().getTime());            
        }catch (Exception e){
            error = e.getMessage();
            if (error == null)
                error = "Error en el guardado";
        }
        return error;
    }

    @Override
    public Planesociotrad getPlanOcioTrad(Planesocio plan, String idioma) {
        return planOcioTradDAO.getPlanOcioTrad(plan, idioma);
    }

}
